#ifndef BUTTON_H
#define BUTTON_H

#include"Picture.h"
#include "touch.h"
#include "font.h"

#define DEBUG_MODE  0

typedef enum __ButtonStatusTypedef
{
    ButtonOff,          //按键关闭状态
    ButtonOn,           //按键开启状态
    ButtonToOn,         //按下后将要转为开启
    ButtonToOff,        //按下后将要转为开启
    ButtonTouching,     //按键按下状态
}ButtonStatusTypedef;

typedef enum __ButtonTypeTypedef
{
    TypeSwitch,          //开关类型
    TypePress            //触动类型
}ButtonTypeTypedef;

typedef enum __ButtonJumpTypedef
{
    Common_Button = 0,      //普通按键
    Jump_Button         //跳转按键
}ButtonJumpTypedef;

typedef struct __ButtonScaleTypedef
{
    int centerLeft;
    int centerTop;
    int width;
    int height;
}ButtonScaleTypedef;

typedef struct __PosTypedef
{
    int Top;
    int Left;
}PosTypedef;

typedef struct __ColorPairDef
{
    struct RGBA color_on;
    struct RGBA color_off;
}ColorPairDef;

typedef struct __ButtonTypedef
{
    ButtonStatusTypedef status;
    ButtonScaleTypedef buttonScale;     //按键位置和有效范围
    ButtonTypeTypedef buttonType;       //按键类型
    ButtonJumpTypedef jumpType;         //跳转类型
    PosTypedef touchDertaPos;           //相对触摸位置

    int withPicture;                        //是否带图片
    struct ak_tde_layer ButtonOffLayerSrc; //按钮关掉的图片
    struct ak_tde_layer ButtonTouchingSrc; //按钮按下时的图片
    struct ak_tde_layer ButtonOnLayerSrc;  //按钮开启的图片
    PosTypedef LayerDertaPos;               //图片相对位置

    char *prefixPath;                      //路径前缀
    
    StringOBJTypedef  buttonString;        //按键配的文字
    PosTypedef stringDertaPos;             //文字相对位置
    ColorPairDef stirngColor;
}ButtonTypedef;

/**
 * @brief 加载图片和位置信息, 注意需要图片的大小信息
 * 
 * @return int 
 */
int ButtonInit(ButtonTypedef *button);

/**
 * @brief 按键刷新图片
 * 
 * @return int 
 */
int ButtonPictureUpdate(ButtonTypedef *button);

/**
 * @brief 检测当前触摸点是否在范围内
 * 
 * @return int 是否状态已改变
 */
int ButtonTouchCheck(ButtonTypedef *button, struct ak_ts_event *ts_event);




#endif